﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace StuertzDatenbank
{
    public partial class Profilgui : Form
    {
        private Sprachfile sprachfile;
        private List<Hersteller> Herstellerliste;
        private List<Status> statusliste;
        private List<Serie> Serienliste;
        private DBF dbf;
        private List<Beschichtungen> beschichtungsliste;

        private List<VerwendungPosition> VerwendungPostionliste;
        private List<Werkzeug> WerkezugListe;
        private List<Werkstoff> werkstoffListe;
        private List<Restriktion> Restrktionsliste;
        private bool FirstcallStatus;

        public Profil profil { get; set; }

        public Profilgui(Benutzer benutzer)
        {
            this.benutzer = benutzer;
            dbf = new DBF();
            sprachfile = new Sprachfile();
            Herstellerliste = new List<Hersteller>();
            Herstellerliste = dbf.listHersteller();
            werkstoffListe = new List<StuertzDatenbank.Werkstoff>();
            VerwendungPostionliste = new List<VerwendungPosition>();
            WerkezugListe = new List<Werkzeug>();
            FirstcallStatus = true; 
            InitializeComponent();
            InitializeComponentchange();

            Refresh();
           
            profil = new Profil(-1);
            Serienliste = new List<Serie>();
            benutzercontrolle();
            Serienliste = dbf.listHerstellerSerien();


        }

        public Profilgui(Benutzer benutzer, Profil profil)
        {
            this.benutzer = benutzer;
            dbf = new DBF();
            this.profil = new Profil(-1);
            this.profil = profil;
            sprachfile = new Sprachfile();
            Herstellerliste = new List<Hersteller>();
            Herstellerliste = dbf.listHersteller();
            werkstoffListe = new List<StuertzDatenbank.Werkstoff>();
            VerwendungPostionliste = new List<VerwendungPosition>();
            WerkezugListe = new List<Werkzeug>();
            FirstcallStatus = true; 

            InitializeComponent();
            InitializeComponentchange();

            //Unterschied
            tabControl1.TabPages.Add(RESTRiktiontabPage);
            Restriktionrebuild();

            //Unterschied ende
            Refresh();
            benutzercontrolle();

            Serienliste = new List<Serie>();
            Serienliste = dbf.listHerstellerSerien();
            ausgechecktcheck();
            this.rebuild();
        }

        private void ausgechecktcheck()
        {
            if (profil.getStatus().getID()==0 && this.benutzer.getMitarbeiternummer() !=profil.getLetzterBearbeiter().getMitarbeiternummer()|this.benutzer.getMitarbeiternummer()==-1 )
            {
                this.Speichernbutton.Visible = false;
                this.Loeschenbutton.Visible = false;
                this.StatuscomboBox.Enabled = false;
                MessageBox.Show(sprachfile.ProfielistAusgeschecktvonBenuter + " " + profil.getLetzterBearbeiter().getbenutzername().ToString());
                
            }
        }



        private void InitializeComponentchange()
        {

            this.Text = sprachfile.Profile;
            this.Start.Text = sprachfile.Start;
            this.Speichernbutton.Text = sprachfile.Speichern;
            this.Loeschenbutton.Text = sprachfile.Loeschen;
            this.Zeichnunggenrieren.Text = sprachfile.ZeichnungGenerieren;
            this.ZeichnungLaden.Text = sprachfile.ZeichnungLaden;
            this.Allgemein.Text = sprachfile.Allgemein;
            this.Einbaulagen.Text = sprachfile.Einbaulagen;
            this.Bearbeitungen.Text = sprachfile.Bearbeitungen;
            this.Besichtungen.Text = sprachfile.Beschichtungen;
            this.Füllmaterial.Text = sprachfile.Füllmaterial;
            this.Dichtung.Text = sprachfile.Dichtung;
            this.Werkstoff.Text = sprachfile.Werkstoff;
            this.label3.Text = sprachfile.Bezeichnung;
            this.HoeheABSlabel.Text = sprachfile.HöheAbs;
            this.Rahmen.Text = sprachfile.Rahmen;
            this.Fenster.Text = sprachfile.Fenster;
            this.EinheitLabelhoehe.Text = sprachfile.Einheit;
            this.EinheitlabelTiefe.Text = sprachfile.Einheit;
            this.Kommentarlabel.Text = sprachfile.Kommentar;
            this.Statuslabel.Text = sprachfile.Status;
            this.TiefeAbsLabel.Text = sprachfile.TiefeAbs;
            this.EinbaulagenbezeichnungEinbaulagenTapDataGrid.HeaderText = sprachfile.Einbaulagen;
            this.BearbeitungsnummerBearbeitungsTapDataGrid.HeaderText = sprachfile.Bearbeitungsnummer;
            this.BearbeitungsnameBearbeitungsTapDataGrid.HeaderText = sprachfile.Bearbeitung;
            this.WerkzeugnameBearbeitungsTapDataGrid.HeaderText = sprachfile.Werkzeugbezeichnung;
            this.BearbeitungswinkelBearbeitungsTapDataGrid.HeaderText = sprachfile.Bearbeitungswinkel;
            this.KommentarBearitungsTapDataGrid.HeaderText = sprachfile.Kommentar;
            this.BeschichtungsbezeichnungBeschichtungTapDataGrid.HeaderText = sprachfile.Beschichtungen;
            this.FuellmaterialBezeichnungFuelmaterialTapDataGrid.HeaderText = sprachfile.Füllmaterial;
            this.DichtungBezeichnungDichtungTapDataGrid.HeaderText = sprachfile.Dichtung;
            this.WerkstoffBezeichungWerkstoffTapDataGrid.HeaderText = sprachfile.Werkstoff;
            this.tabPage1.Text = sprachfile.Hersteller;
            this.Hersteller.HeaderText = sprachfile.Hersteller;
            this.Serie.HeaderText = sprachfile.Serie;
            this.button1.Text = sprachfile.Seriehinzufügen;
            this.VerwendungspositionHinzufuegenbutton.Text = sprachfile.Hinzufügen;
            this.RESTRiktiontabPage.Text = sprachfile.Restriktion;
            this.RestriktionsIDDatagridview.HeaderText = sprachfile.ID;
            this.RESTritkionnameColumDatagridview.HeaderText = sprachfile.Restriktion;
            this.RestriktionArtikelnummerColondatagridview.HeaderText = sprachfile.Artikelnr;
            this.RestriktionLöschenbutton.Text = sprachfile.Loeschen;
            this.Restriktionhinzufügen.Text = sprachfile.Restriktionhinzufügen;
            this.WerkstoffhinzufuegenButton.Text = sprachfile.Werkstoffhinzufügen;
            this.BeschichtunghinzufügenButton.Text = sprachfile.Beschichtunghinzufügen;
            this.Werkzeughinzufügenbutton.Text = sprachfile.WerkzeugHinzufügen;



            statusliste = new List<Status>(dbf.getAllStatus());
            for (int i = 0; i < statusliste.Count; i++)
            {

                StatuscomboBox.Items.Add(statusliste[i].getStatus());

            }
            



            for (int i = 0; i < Herstellerliste.Count; i++)
            {
                this.Hersteller.Items.Add(Herstellerliste[i].getName());

            }

            //Einbaulagen
            Einbaulagenrebuild();
            //Werkstoff
            werkstoffrebuild();
            //Werkzeug
            Werkzeugrebuild();
            //Beschichtungen
            Beschichtungrebuid();

            //Set Defaults

            this.HoehetextBox.Text = "0";
            this.TieftextBox.Text = "0";

            //Restriktion
            tabControl1.TabPages.Remove(RESTRiktiontabPage);


            this.Refresh();
        }

        private void Restriktionrebuild()
        {
            Restrktionsliste = new List<Restriktion>(profil.getRestriktion());
            for (int i = 0; i < Restrktionsliste.Count; i++)
            {
                RestriktionsdataGridView.Rows.Add(Restrktionsliste[i].getID().ToString(), Restrktionsliste[i].getArtikelnummer().ToString(), Restrktionsliste[i].getRestriktion());
            }
        }

        private void Einbaulagenrebuild()
        {
            VerwendungPostionliste = new List<VerwendungPosition>(dbf.getAllEinbaulagen());
            EinbaulagenbezeichnungEinbaulagenTapDataGrid.Items.Clear();
            for (int i = 0; i < VerwendungPostionliste.Count; i++)
            {
                EinbaulagenbezeichnungEinbaulagenTapDataGrid.Items.Add(VerwendungPostionliste[i].getVerwendungPosition());
            }
        }


        private void benutzercontrolle()
        {
            if (this.benutzer.getRolle().getRechte().Profilbearbeiten||this.benutzer.getRolle().getRechte().Profilerstellen)
            {
                this.Speichernbutton.Visible = true;
                    this.Loeschenbutton.Visible = true;
                    this.ZeichnungLaden.Visible = true;
            }
            
            this.Loeschenbutton.Visible = benutzer.getRolle().getRechte().Profilloeschen;
            this.RestriktionLöschenbutton.Visible = this.benutzer.getRolle().getRechte().Datenloeschen;


            //Eigecheckt+Freigabe
            if (profil.getStatus().getID()>0)
            {
                this.Speichernbutton.Visible = false;
                this.Loeschenbutton.Visible = false;
                this.ZeichnungLaden.Visible = false;
                this.RestriktionLöschenbutton.Visible = false;

            }

            this.Refresh();
        }


        private void Start_Click_1(object sender, EventArgs e)
        {
            this.Visible = false;
            startgui gui = new startgui(benutzer);
            this.Dispose();
            gui.ShowDialog();

        }

        private void button2_Click_1(object sender, EventArgs e)
        {

            this.Visible = false;
            ProfilstartGui gui = new ProfilstartGui(benutzer);
            this.Dispose();
            gui.ShowDialog();
        }









        public Benutzer benutzer { get; set; }

        private void SpeicherButtonclick(object sender, EventArgs e)
        {


            //Allgemein
            profil.setErstelltVon(benutzer);
            profil.setErstelltWann(System.DateTime.Now);
            profil.setBezeichnung(this.BezeichnungtextBox.Text);
            profil.setHoeheAbs(Decimal.Parse(this.HoehetextBox.Text));
            profil.setTiefeAbs(Decimal.Parse(this.TieftextBox.Text));
            profil.setKommentar(this.KommentarrichTextBox.Text);
            //Status
           


          
            profil.setRahmenFenster(!FenstercheckBox.Checked);

            //Hersteller+Serien
            for (int i = 0; i < HerstellerdataGridView.Rows.Count; i++)
            {
                for (int j = 0; j < Herstellerliste.Count; j++)
                {
                    if (HerstellerdataGridView.Rows[i].Cells[0].Value != null && Herstellerliste[j].getName() == HerstellerdataGridView.Rows[i].Cells[0].Value.ToString())
                    {
                        if (!profil.getAlleHersteller().Contains(Herstellerliste[j],new Herstellercomparer()))
                        {
                            profil.getAlleHersteller().Add(Herstellerliste[j]);
                        }
                        
                    }
                }
                //Serie
                for (int k = 0; k < Serienliste.Count; k++)
                {
                    if (HerstellerdataGridView.Rows[i].Cells[1].Value != null && Serienliste[k].getSerie() == HerstellerdataGridView.Rows[i].Cells[1].Value.ToString())
                    {
                        if (!profil.getSerie().Contains(Serienliste[k], new Seriecomparer()))
	                        {
		                        profil.getSerie().Add(Serienliste[k]);
	                        }
                        
                    }
                }


            }
            //Einbaulagen
            for (int i = 0; i < EinbaulagendataGridView.Rows.Count; i++)
            {
                for (int j = 0; j < VerwendungPostionliste.Count; j++)
                {
                    if (EinbaulagendataGridView.Rows[i].Cells[0].Value != null && VerwendungPostionliste[j].getVerwendungPosition() == EinbaulagendataGridView.Rows[i].Cells[0].Value.ToString())
                    {
                        if (!profil.getVerwendungsposition().Contains(VerwendungPostionliste[j], new VerwendungPositioncomparer()))
                        {
                            profil.getVerwendungsposition().Add(VerwendungPostionliste[j]); 
                        }
                        
                    }
                }

            }
            //Bearbeitungen
            for (int i = 0; i < BearbeitungenDataGridView.Rows.Count; i++)
            {
                try
                {
                    profil.getBearbeitungen()[i].setBearbeitungsnummer(int.Parse(BearbeitungenDataGridView.Rows[i].Cells[0].Value.ToString()));
                    profil.getBearbeitungen()[i].setBearbeitungsname(BearbeitungenDataGridView.Rows[i].Cells[1].Value.ToString());
                    for (int j = 0; j < WerkezugListe.Count; j++)
                    {
                        if (WerkezugListe[j].getWerkzeugBezeichnung().ToString() == BearbeitungenDataGridView.Rows[i].Cells[2].Value.ToString())
                        {
                            profil.getBearbeitungen()[i].setWerzeug(WerkezugListe[j]);
                        }
                    }
                    profil.getBearbeitungen()[i].setBearbeitungswinkel(BearbeitungenDataGridView.Rows[i].Cells[3].Value.ToString());
                    profil.getBearbeitungen()[i].setKommentar(BearbeitungenDataGridView.Rows[i].Cells[4].Value.ToString());

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

            //Beschichtungen
            for (int i = 0; i < BeschichtungendataGridView.Rows.Count; i++)
            {
                for (int j = 0; j < this.beschichtungsliste.Count; j++)
                {
                    if (BeschichtungendataGridView.Rows[i].Cells[0].Value != null && beschichtungsliste[j].getBeschichtungen() == BeschichtungendataGridView.Rows[i].Cells[0].Value.ToString())
                    {
                        if (!profil.getBeschichtungen().Contains(beschichtungsliste[j],new Beschichtungscomparer()))
                        {
                            profil.getBeschichtungen().Add(beschichtungsliste[j]);
                        }

                    }
                }

            }

                      

            //Fuellmaterial
            for (int i = 0; i < FuellmaterialdataGridView.Rows.Count; i++)
            {
                profil.getFuellmaterial()[i].setFuellmaterial(FuellmaterialdataGridView.Rows[i].Cells[0].Value.ToString());

            }
            //Dichtung
            for (int i = 0; i < DichtungDataGridView.Rows.Count; i++)
            {
                profil.getDichtung()[i].setDichtung(DichtungDataGridView.Rows[i].Cells[0].Value.ToString());

            }
            //Werkstoff
            for (int i = 0; i < WerkstoffdataGridView.Rows.Count; i++)
            {
                for (int j = 0; j < this.werkstoffListe.Count; j++)
                {
                    if (WerkstoffdataGridView.Rows[i].Cells[0].Value != null && werkstoffListe[j].getWerkstoff() == WerkstoffdataGridView.Rows[i].Cells[0].Value.ToString())
                    {
                        if (!profil.getWerkstoff().Contains(werkstoffListe[j], new Werkstoffcomparer()))
                        {
                            profil.getWerkstoff().Add(werkstoffListe[j]);
                        }

                    }
                }

            }
           


           
            int ID = dbf.ProfilEintragen(profil);
            profil.setID(ID);
            if (profil.getStatus().getID()>0)
            {
                //this.Visible = false;
                ProfilstartGui gui = new ProfilstartGui(benutzer);
                this.Dispose();
                gui.ShowDialog();
                
            }
            
        }



        private void ZeichnungLaden_Click(object sender, EventArgs e)
        {
            ZeichnungladenGui gui = new ZeichnungladenGui(this);
            gui.ShowDialog();

            this.rebuild();
        }

        private void rebuild()
        {
            //algemein
            this.HoehetextBox.Text = profil.getHoeheAbs().ToString();
            this.TieftextBox.Text = profil.getTiefeAbs().ToString();
            this.KommentarrichTextBox.Text = profil.getKommentar().ToString();

            this.StatuscomboBox.SelectedItem = profil.getStatus().getStatus();

            if (profil.getRahmenFenster() == false)
            {
                this.FenstercheckBox.Checked = true;
                this.Fenstercheckbox2.Checked = false;
            }
            else
            {
                this.FenstercheckBox.Checked = false;
                this.Fenstercheckbox2.Checked = true;
            }



            this.BezeichnungtextBox.Text = profil.getBezeichnung();

            //Hersteller

            List<Serie> serienliste = new List<StuertzDatenbank.Serie>(profil.getSerie());
            HerstellerdataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
            Hersteller.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
            Serie.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
            HerstellerdataGridView.AutoGenerateColumns = false; 

            for (int i = 0; i < profil.getAlleHersteller().Count; i++)
            {
                
                this.HerstellerdataGridView.Rows.Add(profil.getHerstellerausliste(i).getName(),null);

                try
                {
                    HerstellerdataGridView.UpdateCellValue(0, i);
                }
                catch (Exception)
                {

                    throw;
                }
               
               

                
                //Herstellerserie
                List<Serie> Herstellerserieliste = new List<Serie>();
                Herstellerserieliste.Clear();
                Herstellerserieliste = dbf.getHerstellerserien(profil.getHerstellerausliste(i));
                for (int k = 0; k < Herstellerserieliste.Count; k++)
                {
                    for (int j = 0; j < serienliste.Count; j++)
                    {
                        if (Herstellerserieliste[k].getID() == serienliste[j].getID())
                        {
                            if (this.HerstellerdataGridView.Rows[i].Cells[1].Value==null)
                            {
                                this.HerstellerdataGridView.Rows[i].Cells[1].Value = serienliste[j].getSerie().ToString();
                                HerstellerdataGridView.UpdateCellValue(1,i);
                            serienliste.RemoveAt(j); 
                            }
                            
                        }
                    }
                }
            }
            for (int i = 0; i < serienliste.Count; i++)
            {
                this.HerstellerdataGridView.Rows.Add(null, serienliste[i].getSerie());
            }
           
            this.HerstellerdataGridView.DataBindings.Clear();
            
           


            //Einbaulagen
            this.EinbaulagendataGridView.Rows.Clear();
            for (int i = 0; i < profil.getVerwendungsposition().Count; i++)
            {
                this.EinbaulagendataGridView.Rows.Add(profil.getVerwendungsposition()[i].getVerwendungPosition());
            }


            //Bearbeitungen
            this.BearbeitungenDataGridView.Rows.Clear();
            
            for (int i = 0; i < profil.getBearbeitungen().Count; i++)
            {

                if (profil.getBearbeitungen()[i].getWerkzeug().getID()==-1)
                {
                    profil.getBearbeitungen()[i].setWerzeug(WerkezugListe[0]);

                }
                this.BearbeitungenDataGridView.Rows.Add(profil.getBearbeitungen()[i].getBearbeitungsnummer().ToString(), profil.getBearbeitungen()[i].getBearbeitungsname(), profil.getBearbeitungen()[i].getWerkzeug().getWerkzeugBezeichnung(), profil.getBearbeitungen()[i].getBearbeitungswinkel(), profil.getBearbeitungen()[i].getKommentar());
            }


            //Besichictung
            this.BeschichtungendataGridView.Rows.Clear();
            for (int i = 0; i < profil.getBeschichtungen().Count; i++)
            {
                this.BeschichtungendataGridView.Rows.Add(profil.getBeschichtungen()[i].getBeschichtungen());
            }

            //Füllmaterial
            FuellmaterialdataGridView.Rows.Clear();
            for (int i = 0; i < profil.getFuellmaterial().Count; i++)
            {
                this.FuellmaterialdataGridView.Rows.Add(profil.getFuellmaterial()[i].getFuellmaterial().ToString());

            }


            //Dichtung
            DichtungDataGridView.Rows.Clear();
            for (int i = 0; i < profil.getDichtung().Count; i++)
            {
                this.DichtungDataGridView.Rows.Add(profil.getDichtung()[i].getDichtung());

            }


            //Werkstoff
            WerkstoffdataGridView.Rows.Clear();
            for (int i = 0; i < this.profil.getWerkstoff().Count; i++)
            {
                this.WerkstoffdataGridView.Rows.Add(profil.getWerkstoff()[i].getWerkstoff());

            }


            this.Refresh();
        }

        private void Zeichnunggenrieren_Click(object sender, EventArgs e)
        {


            DrawingHandler dH = new DrawingHandler();
            WW.Cad.Model.DxfModel model = new WW.Cad.Model.DxfModel(profil.getZeichnung());
            WW.Math.Point3D p = new WW.Math.Point3D(0, 0, 0);

            model = dH.fuisonmodel(model, profil.getZeichnung(), profil.getBezeichnung(), p);


            for (int i = 0; i < profil.getBearbeitungen().Count; i++)
            {
                model = dH.fuisonmodel(model, profil.getBearbeitungen()[i].getLayer(), profil.getBearbeitungen()[i].getBearbeitungsname(), p);
            }

            for (int i = 0; i < profil.getFuellmaterial().Count; i++)
            {
                model = dH.fuisonmodel(model, profil.getFuellmaterial()[i].getLayer(), profil.getFuellmaterial()[i].getFuellmaterial(), p);
            }
            for (int i = 0; i < profil.getDichtung().Count; i++)
            {
                model = dH.fuisonmodel(model, profil.getDichtung()[i].getDichtungslayer(), profil.getDichtung()[i].getDichtung(), p);
            }



            Zeichnunganzeigen zeichnunganzeigen = new Zeichnunganzeigen(model);

            zeichnunganzeigen.Visible = true;
        }





        private void Seriehinzufügenbuttonbutton_Click(object sender, EventArgs e)
        {
            Seriehinzufügen gui = new Seriehinzufügen(this.profil);
            gui.ShowDialog();
            Serienlisterebuild();
            HerstellerdataGridView.Rows.Add("", profil.getSerie().Last().getSerie());


        }

        private void Serienlisterebuild()
        {
            Serienliste = new List<StuertzDatenbank.Serie>();
            Serienliste.Clear();
            Serienliste = dbf.listHerstellerSerien();



        }

        private void HerstellerdataGridView_CellContentValidatet(object sender, DataGridViewCellEventArgs e)
        {
            try
            {



                this.Serie.Items.Clear();
                if (this.HerstellerdataGridView.Columns[e.ColumnIndex].Index == 0 && this.HerstellerdataGridView.Rows[e.RowIndex].Cells[0].Value != null)
                {

                    for (int i = 0; i < Herstellerliste.Count; i++)
                    {
                        if (HerstellerdataGridView.Rows[e.RowIndex].Cells[0].Value != null && HerstellerdataGridView.Rows[e.RowIndex].Cells[0].Value.ToString() == Herstellerliste[i].getName())
                        {

                            
                            List<Serie> HerstellerSerienliste = new List<StuertzDatenbank.Serie>();
                            HerstellerSerienliste.Clear();
                            HerstellerSerienliste = dbf.getHerstellerserien(Herstellerliste[i]);

                            for (int j = 0; j < HerstellerSerienliste.Count; j++)
                            {

                                this.Serie.Items.Add(HerstellerSerienliste[j].getSerie());

                            }
                        }
                    }








                }
                else if (this.HerstellerdataGridView.Columns[e.ColumnIndex].Index == 1 || this.HerstellerdataGridView.Rows[e.RowIndex].Cells[0].Value == null)
                {
                    for (int i = 0; i < Serienliste.Count; i++)
                    {

                        this.Serie.Items.Add(Serienliste[i].getSerie());

                    }

                }
                else if (this.HerstellerdataGridView.Columns[e.ColumnIndex].Index == 1 && this.HerstellerdataGridView.Rows[e.RowIndex].Cells[0].Value != null)
                {
                    for (int i = 0; i < Herstellerliste.Count(); i++)
                    {
                        if (this.HerstellerdataGridView.Rows[e.RowIndex].Cells[0].Value.ToString() == Herstellerliste[i].getName())
                        {
                            List<Serie> Herstelerserienliste = new List<Serie>();
                            Herstelerserienliste.Clear();
                            Herstelerserienliste = dbf.getHerstellerserien(Herstellerliste[i]);
                            for (int k = 0; k < Herstelerserienliste.Count; k++)
                            {
                                this.Serie.Items.Add(Herstelerserienliste[k].getSerie());
                            }

                        }
                    }
                }


            }
            catch (Exception)
            {


            }

            this.HerstellerdataGridView.DataBindings.Clear();
        }


        private void VerwendungspositionHinzufuegenbutton_Click(object sender, EventArgs e)
        {
            VerwendungsPositionHinzufügen gui = new VerwendungsPositionHinzufügen();
            gui.ShowDialog();

            Einbaulagenrebuild();

        }

        private void Werkzeughinzufügenbutton_Click(object sender, EventArgs e)
        {
            Werkzeughinzufuegengui gui = new Werkzeughinzufuegengui();
            gui.ShowDialog();

            Werkzeugrebuild();
        }

        private void Werkzeugrebuild()
        {
            WerkezugListe = new List<Werkzeug>(dbf.getAllWerkzeuge());
            WerkzeugnameBearbeitungsTapDataGrid.Items.Clear();
            for (int i = 0; i < WerkezugListe.Count; i++)
            {
                WerkzeugnameBearbeitungsTapDataGrid.Items.Add(WerkezugListe[i].getWerkzeugBezeichnung());
            }
            

        }

        private void WerkstoffhinzufuegenButton_Click(object sender, EventArgs e)
        {
            Werkstoffhinzufuegengui gui = new Werkstoffhinzufuegengui();
            gui.ShowDialog();


            werkstoffrebuild();
        }

        private void werkstoffrebuild()
        {
            werkstoffListe = new List<StuertzDatenbank.Werkstoff>(dbf.getAllWerstoffe());
            WerkstoffBezeichungWerkstoffTapDataGrid.Items.Clear();
            for (int i = 0; i < werkstoffListe.Count; i++)
            {
                WerkstoffBezeichungWerkstoffTapDataGrid.Items.Add(werkstoffListe[i].getWerkstoff());
            }

        }

        private void BeschichtunghinzufügenButton_Click(object sender, EventArgs e)
        {
            Beschichtunghinzufügen gui = new Beschichtunghinzufügen();
            gui.ShowDialog();
            Beschichtungrebuid();
        }

        private void Beschichtungrebuid()
        {
            beschichtungsliste = new List<Beschichtungen>();
            beschichtungsliste.Clear();
            beschichtungsliste = dbf.listAlleBeschichtungen();
            for (int i = 0; i < beschichtungsliste.Count; i++)
            {
                BeschichtungsbezeichnungBeschichtungTapDataGrid.Items.Add(beschichtungsliste[i].getBeschichtungen());

            }

        }

        private void RestriktionLöschenbutton_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < RestriktionsdataGridView.Rows.Count; i++)
            {
                if (RestriktionsdataGridView.Rows[i].Cells[0].Value != null && RestriktionsdataGridView.Rows[i].Selected)
                {
                    profil.getRestriktion().RemoveAt(i);
                }
            }
            this.Restriktionrebuild();
        }

        private void Restriktionhinzufügen_Click(object sender, EventArgs e)
        {
            RestriktionHinzufugenGui gui = new RestriktionHinzufugenGui(profil);
            gui.ShowDialog();
            Restriktionrebuild();
        }

        private void FenstercheckBox_CheckedChanged(object sender, EventArgs e)
        {
            this.Fenstercheckbox2.Checked = !this.FenstercheckBox.Checked;
        }

        private void Fenstercheckbox2_CheckedChanged(object sender, EventArgs e)
        {
            this.FenstercheckBox.Checked = !this.Fenstercheckbox2.Checked;
        }

        private void DataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs anError)
        {
           
            for (int i = 0; i < Serienliste.Count; i++)
            {
                if (Serie.Items.Contains(Serienliste[i].getSerie()))
                {
                    this.Serie.Items.Add(Serienliste[i].getSerie());   
                }
                

            }
           //HerstellerdataGridView.Update();
           
                anError.Cancel=true;
            /*

            this.HerstellerdataGridView_CellContentValidatet(sender, ); 
            
            MessageBox.Show("Error happened " + anError.Context.ToString());

            if (anError.Context == DataGridViewDataErrorContexts.Commit)
            {
                MessageBox.Show("Commit error");
            }
            if (anError.Context == DataGridViewDataErrorContexts.CurrentCellChange)
            {
                MessageBox.Show("Cell change");
            }
            if (anError.Context == DataGridViewDataErrorContexts.Parsing)
            {
                MessageBox.Show("parsing error");
            }
            if (anError.Context == DataGridViewDataErrorContexts.LeaveControl)
            {
                MessageBox.Show("leave control error");
            }

            if ((anError.Exception) is ConstraintException)
            {
                DataGridView view = (DataGridView)sender;
                view.Rows[anError.RowIndex].ErrorText = "an error";
                view.Rows[anError.RowIndex].Cells[anError.ColumnIndex].ErrorText = "an error";

                anError.ThrowException = false;
            }
        */
        }

       private void BearbeitungenDataGridView_DataError(object sender, System.Windows.Forms.DataGridViewDataErrorEventArgs e)
        {
            Werkzeugrebuild();
           
            e.Cancel = true;
        }

       private void StatuscomboBox_SelectedIndexChanged(object sender, EventArgs e)
       {
           if (StatuscomboBox.SelectedItem==null)
           {
               profil.setStatus(statusliste[0]);
           }else if (profil.getStatus().getID() == 0 && profil.getLetzterBearbeiter().getMitarbeiternummer() == benutzer.getMitarbeiternummer() && benutzer.getRolle().getRechte().Profilbearbeiten || benutzer.getMitarbeiternummer() == -1 || profil.getStatus().getID() != 0 && benutzer.getRolle().getRechte().Profilbearbeiten)
           {
               //Status
               for (int i = 0; i < statusliste.Count; i++)
               {
                   if (StatuscomboBox.SelectedItem != null && statusliste[i].getStatus() == StatuscomboBox.SelectedItem.ToString())
                   {
                       profil.setStatus(statusliste[i]);
                   }
                 
               }
               Boolean b = dbf.ProfilStatusAendern(profil, benutzer);
               if (!b)
               {
                   StatuscomboBox.SelectedItem = statusliste[0].getStatus();
                   return;
               }

               if (!FirstcallStatus)
           {

                this.SpeicherButtonclick(sender, e);

           }
               FirstcallStatus = false;
               benutzercontrolle();
                   this.Refresh();
               
               if (profil.getStatus().getID() == 2)
               {
                   profilfreigeben();
               }
           }
          
       }

       private void profilfreigeben()
       {
           profil.setFreigabeVon(this.benutzer);
           profil.setFreigabeWann(DateTime.Now);
       }

       private void Loeschenbutton_Click(object sender, EventArgs e)
       {
           if (MessageBox.Show(sprachfile.ObjektLoeschen, sprachfile.ObjektLoeschenKopfzeile, MessageBoxButtons.YesNo) == DialogResult.Yes)
           {
               dbf.ProfilLoeschen(profil);
               this.Visible = false;
               ProfilstartGui gui = new ProfilstartGui(benutzer);
               this.Dispose();
               gui.ShowDialog();
           }
       }

       

        

    }
    }

